package com.wtwd.campus.jdzc.dao;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wtwd.campus.entity.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author mjy
 * @date 2022/02/15
 * @description
 */
@Mapper
public interface JdzcLogMapper {

    //获取通话记录
    IPage<Map<String,Object>> getCallRecord(@Param("data") QueryCallRecordDataVo data, @Param("page") Page<Map<String,Object>> page);

    //获取监听记录
    IPage<Map<String,Object>> getMonitorRecord(@Param("data") QueryMonitorRecordDataVo data, @Param("page") Page<Map<String,Object>> page);

    //新增一笔操作记录
    Integer addAuditLog(@Param("audit") AuditLog audit);

    //获取用户的操作模块
    List<String>  getOperationModule(@Param("orgCode") String orgCode);

    //条件查询获取操作记录列表
    IPage<Map<String,Object>> getOperationRecordList(@Param("data") QueryOperationRecordVo data, @Param("page") Page<Map<String,Object>> page);

    //根据学校id获取学校组织编码
    String getOrgCodeBySchoolId(Integer schoolId);

    //根据学生id获取组织编码以及学生姓名
    Map<String,Object> getOrgCodeAndStuNameByStuId(@Param("stuId") Integer stuId );

    //新增一笔通话记录
    Integer addCallRecord(@Param("data") CallRecord data);

    //新增一笔监听记录
    Integer addMonitorRecord(@Param("data") MonitorRecord data);

    IPage<Map<String,Object>>  getCommandRecordList(@Param("searchMap") HashMap<String, Object> searchMap, @Param("orgCode") String orgCode, @Param("page") Page<Object> page);

    IPage<Map<String, Object>> getAlarmRecordList(@Param("orgCode") String orgCode,@Param("searchMap") HashMap<String, Object> searchMap,@Param("page") Page<Object> page);

    IPage<Map<String, Object>> getLoginLogByCondition(@Param("orgCode") String orgCode,@Param("name") String name,@Param("startTime") Long startTime,@Param("endTime") Long endTime, @Param("page") Page<Object> page);

    //获取微信用户和h5用户的操作记录
    List<Map<String, Object>> getWxAndH5CommandRecord(@Param("orgCode") String orgCode,@Param("searchMap") HashMap<String, Object> searchMap);

    //根据学校id获取学校信息
    School getSchoolById(Integer schoolId);

    //根据年级id获取学校信息
    Map<String ,Object> getSchoolAndGradeByGradeId(Integer gradeId);

    //根据班级id获取班级信息以及所属学校的组织code
    Map<String,Object> getClassMessAndSchoolCodeById(Integer classId);

    //根据教师id拿到教师名称和所属学校组织code
    Map<String,Object> getTeacherNameAndSchoolCodeById(Integer teaId);

    //根据设备id获取设备的sos列表
    List<DeviceSOSList> getSOSListByDeviceId(Integer deviceId);

    //修改SOS记录的状态
    Integer updateSosListStatus(@Param("id") Integer id ,@Param("status") Integer status,@Param("commandNumber") String commandNumber);

    //添加一笔SOS号码记录
    Integer insertSosNumberList(@Param("data") DeviceSOSList data);

    //获取一笔sos号码记录根据id
    DeviceSOSList getDeviceSOSMessById(Integer id);

    //根据学生id获取通话记录
    List<Map<String,Object>> getCallRecordByStuId(@Param("stuId") Integer stuId,@Param("start") Integer start,@Param("end") Integer end);

    //根据设备id获取通话记录
    List<Map<String,Object>> getCallRecordByDeviceId(Integer deviceId);

    //根据学生id获取该学生存在的所有告警类型
    List<Map<String,Object>> getWarningTypeByStuId(Integer stuId);

    //根据学生id获取该学生存在的所有告警类型
    List<Map<String,Object>> getWarningListByStuIdAndType(@Param("stuId") Integer stuId,@Param("type") Integer type,@Param("start") Integer start,@Param("end") Integer end);

    //根据设备id获取该设备存在的所有告警类型
    List<Map<String,Object>> getWarningTypeByDeviceId(Integer deviceId);

    //根据设备id获取该学生存在的所有告警类型
    List<Map<String,Object>> getWarningListByDeviceIdAndType(@Param("deviceId")Integer deviceId,@Param("type")Integer type);

    //根据学生id和类型获取最新一条数据
    List<Map<String,Object>> getLatestLocationByStuIdAndType(@Param("stuId")Integer stuId,@Param("type")Integer type);

    //修改SOS记录的状态和数据
    Integer updateSosListData(@Param("data") SOSListVO data, @Param("status") Integer status, @Param("commandNumber") String commandNumber);

    //根据类型和时间查询记录笔数
    int selectCountByTypeAndTime(@Param("deviceId") Integer deviceId,@Param("type") Integer type,@Param("start") Long start);
}
